package 二分查找;

import java.util.Scanner;

public class 跳石头 {
    static int L;
    static int N;
    static int M;

    static int[] stone;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        L = scanner.nextInt();
        N = scanner.nextInt();
        M = scanner.nextInt();
        stone = new int[N + 10000];

        for (int i = 1; i <= N; i++) {
            stone[i] = scanner.nextInt();
        }
        int l = 0;
        int r = L;

        //最小值最大二分
        while (l < r) {
            int mid = (l + r + 1) >>> 1;
            if (check(mid)) {
                l = mid; //满足条件 但是l可能需要调整大一点
            } else {
                r = mid - 1; //没有满足条件 需要调小一点
            }
        }
        System.out.println(l);
    }

    private static boolean check(int mid) {
        int num = 0; //记录搬离的石头数；
        int per = 0; //  记录搬到哪块石头的值
        for (int i = 1; i <=N; i++) {
            if (stone[i] - per < mid) {
                num++;
            } else {
                per = stone[i];
            }
        }
        if (num <= M) return true;
        else return false;
    }

}
